package com.equipment;

import java.util.NoSuchElementException;
import android.annotation.SuppressLint;
import com.util.EncodingUtil;

/**
 * 卡片复位指令 DFB1
 *
 * @version 1.18
 * @author 刘亚东
 *
 */
@SuppressLint("DefaultLocale")
public class ColdResetResponse {
	// 帧开始标记
	private String stx = "55AA";
	// 串口帧序列号
	private String rsctl = "00";
	// 长度
	private String Length = "";
	// 代码类型
	private String code = "DF";
	// 拓展子码
	private String subCode = "B1";
	// 异或校验值
	private String bcc = "";

	// 状态:0表示成功，非0失败
	private String status = "";
	// PSAM卡号（1~4），接触式大卡号 0，非接触卡号0xff
	private String PsamNum = "";
	// 复位信息长度
	private String resetLen = "";
	// CPU卡复位信息
	private String resetData = "";

	/**
	 * 解析A1卡复位指令
	 *
	 * @param context
	 * @return
	 */
	public ColdResetResponse analysis(String context)
			throws NoSuchElementException {
		// 声明一个对象来封装属性
		ColdResetResponse cr = new ColdResetResponse();
		;
		try {
			cr.setPsamNum(context.substring(16, 18));
			// 判断是否是B1指令
			if (!context.substring(12, 14).toUpperCase().equals("B1")) {
				throw new NoSuchElementException("卡片复位失败");
			}
			// 判断状态是否成功
			if (!context.substring(14, 16).equals("00")) {
				throw new NoSuchElementException("卡片复位失败");
			}
			// 截取到BCC校验值 需要判断校验是否相等
			bcc = context.substring(context.length() - 2).toUpperCase();
			// 截取到发送的数据(总长度-2个字节计算到数据的最后位置)
			String str = context.substring(4, context.length() - 2);
			// 得到比对校验
			str = EncodingUtil.yihuo(EncodingUtil.change(str)).toUpperCase();
			// 判断校验是否一致
			if (!str.equals(bcc)) {
				throw new NoSuchElementException("卡片复位失败");
			}
			// 如果没问题就new 对象 把解析的值放入对象
			// 截取状态
			cr.setStatus(context.substring(14, 16));
			// 截取PSAM卡号
			cr.setPsamNum(context.substring(16, 18));
			// 复位信息长度
			cr.setResetLen(context.substring(18, 20));
			// CPU卡复位信息
			cr.setResetData(context.substring(20, context.length() - 2));
		} catch (Exception e) {
			e.printStackTrace();
			String str = "";
			if ("FF".equals(cr.getPsamNum())) {
				str = "非接触";
			}
			throw new NoSuchElementException(str + "卡片复位失败");
		}
		return cr;
	}

	public String getStx() {
		return stx;
	}

	public void setStx(String stx) {
		this.stx = stx;
	}

	public String getRsctl() {
		return rsctl;
	}

	public void setRsctl(String rsctl) {
		this.rsctl = rsctl;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getSubCode() {
		return subCode;
	}

	public void setSubCode(String subCode) {
		this.subCode = subCode;
	}

	public String getBcc() {
		return bcc;
	}

	public void setBcc(String bcc) {
		this.bcc = bcc;
	}

	public String getPsamNum() {
		return PsamNum;
	}

	public void setPsamNum(String psamNum) {
		PsamNum = psamNum;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getResetLen() {
		return resetLen;
	}

	public void setResetLen(String resetLen) {
		this.resetLen = resetLen;
	}

	public String getResetData() {
		return resetData;
	}

	public void setResetData(String resetData) {
		this.resetData = resetData;
	}

	public String getLength() {
		return Length;
	}

	public void setLength(String length) {
		Length = length;
	}

}
